#include <iostream>

using namespace std;


//class Person {
//public:
//    //虚函数--是多态的条件之一
//    virtual Person* BuyTicket() { cout << "Person---买票-全价" << endl; return this; }
//};
////虚函数的的重写/覆盖
////三同：函数名，参数，返回值
////特殊情况：
//// 1、子类虚函数 可以不加virtual（但是如果父类不加virtual，子类加virtual就不会产生多态）
////建议virtual关键字都加上
////2、协变：三同中，返回值可以不同，但是要求返回值必须是一个父子类关系的指针或者引用,也可以是其他子类父类的指针或者引用
//class Student:public Person
//{
//public:
//    //virtual void BuyTicket() { cout << "Student----买票-半价" << endl; }
//
//    virtual Student* BuyTicket() { cout << "Student----买票-半价" << endl; return this; }
//};
//class Soidor :public Person
//{
//public:
//    //virtual void BuyTicket() { cout << "Soidor----买票-优先买票" << endl; }
//    virtual Soidor* BuyTicket() { cout << "Soidor----买票-优先买票" << endl; return this; }
//
//};
////多态的条件：
////1、虚函数的重写
////2、父类的指针或者引用去调用虚函数
//void test(Person& p)
//{
//    p.BuyTicket();
//}
//int main()
//{
//    Person pn;
//    Student st;
//    Soidor sd;
//    test(pn);
//    test(st);
//    test(sd);
//    //普通调用：跟调用对象类型有关
//    //多态调用：（指针或者引用）指向的对象有关
//    return 0;
//}

/// <summary>
/// //////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// </summary>
//class Person {
//public:
//    virtual ~Person()
//    {
//        cout << " person delete:" << _p << endl;
//        delete[] _p;
//    }
//protected:
//        int* _p = new int[10];
//};
//
//class Student :public Person
//{
//public:
//    virtual ~Student()
//    {
//        cout << " Student delete:" << _s << endl;
//        delete[] _s;
//    }
//protected:
//    int* _s = new int[20];
//};
//int main()
//{
//    //Student s;
//    //Person p;
//    Person* ptr1 = new Person;
//    Person* ptr2 = new Student;
//
//    delete ptr1;
//    delete ptr2;
//    return 0;
//}

////////////////////////////////////////////////////////////////////////
////如果实现一个不能被继承的类
////1、构造私有  c++98
////2、类定义的时候 加final  直接会报错
////overread 检测子类函数是否完成重写
//class A final
//{
//private:
//	A()
//	{}
//};
//
//class B :public A
//{
//
//};



///////////////////////////////////////////////////////////////
//纯虚函数
class car
{
public:
	virtual void Drive() = 0;
};


class BMW :public car
{

};

int main()
{


	return 0;
}








